接續昨天說完暫存器的看法,再來講一下GPIO口的八種模式,兩大類分成輸出跟輸入細分有以下8種
剛學嵌入式的新手,這些觀念必須要搞清楚,最常接觸的就是推輓輸出跟開漏輸出。
Open,輸出是開路的,所以使用的話就要加上拉電阻,主要的結構NMOS或NPN的BJT,STM的內部是用MOSFET,Drain為輸出,這輸出模式主要用來做電位的轉換,IO口的電位是由外部的上拉電組VCC來做決定的(5Vor3.3V),下面這張圖為開漏輸出的圖:
可以看到這張Reference manual裡面的圖,我紅框起來的PMOS,使用開漏輸出的話只會用到下面的NMOS,注意這邊NMOS跟PMOS的Gate腳是分開的前面接了一個 Output control(輸出控制),開漏只會用下面的MOS,推輓的話兩個Gate腳會接在一起。
先提一下上拉電阻的問題,電阻值不是隨便決定的後面會在教學怎麼去算上拉電阻,這跟拉LOW拉HIGH的速度有關,這速度不管的話很多Snesor會抓取不到正確的數位數值,這在I2C有很重要的地位。
如字面上的意思,推跟拉的輸出,MCU內的推挽輸出的結構是利用CMOS(互補式金屬氧化物半導體),輸出上端PMOS下端為NNOS,那怎麼做到推拉?
可以看到我紅框的部分,可以當作PMOS跟NMOS的Gate腳是接在一起的,他的預作原理當輸出控制給VDD時PMOS不導通NMOS是導通這樣輸出會接地拉電流,想反的輸出控制給GND時PMOS導通NMOS不導通,輸出會接VDD灌電流到輸出類似於推的動作。其實這工作就是CMOS的反向器,這樣可以做很快速的切換。
簡單來說,在STM有些IO口有對應的功能來開啟,我前幾天說的腳位定義那裏都有清楚的表示,例如UART、I2C、SPI、ADC,就根據你要開啟的硬體上的功能來複用。
這沒甚麼好解釋的,MCU內部有ADC開啟類比輸入模式來讀取類比值轉換成數位值。
通常用作按鍵的狀態檢測,可以看到我DAY2的電路圖,Reset的部分按鈕並聯個電容在上拉個電阻,沒按下的狀態是上拉3.3V,按下時是GND,這樣電路也可以應用在浮空輸入,至於最後的上拉跟下拉輸入意思也一樣,看你是要用內部的上下拉還是外部的,就自己決定瞜~
今天大致是這樣,明天我來分享如何用標準庫來開發吧,我還是先以STM32F103這顆常見的MCU來做解釋好了。